3.6 PE命令文
PE命令文は 1 ステップに実行されるPE命令に翻訳される単位である。
PE命令文は、いくつかのPE命令式をセミコロンで区切り、改行で終端する形式を持つ。
PE命令式は、nop命令、noforward命令、l2bmdarw命令、wait命令を除き、 1 つのオペコード、 0 個以上の入力オペランド、 1 個以上の出力オペランドが、 1 つ以上の空白文字によって区切られた次のような文法を持つ。
code:txt
<opcode> <in-operand-1> ... <in-operand-k> <out-operand-1> <out-operand-2> ...
ある式がいくつの入力オペランドを持つかはオペコードによって決まる。出力オペランドは他の制限が許す
かぎり任意の個数を指定できる。
nop命令、noforward命令、l2bmdarw命令、wait命令は入出力値を持たないので上記の文法にあてはまら
ない。
セミコロン区切りで 1 行に複数の式を列挙することで、翻訳結果のビットフィールドが重ならないなどの条
件のもとで、 1 命令として発行できる。
以下にいくつかの例を示す。オペコード、オペランドの詳細な文法は後述する。
dvpassaはMAUによりデータのコピーを行う 1 入力オペランドの命令である。
以下の例ではLM0 ($lm0v)からLM1 ($ln0v)にコピーを行う。
code:例 1
dvpassa $lm0v $ln0v
以下は出力オペランドが 2 つある例である。
LM0からLM1とGRF0 ($lr0v)にコピーを行う。
code:例 2
dvpassa $lm0v $ln0v $lr0v
lincはALUにより倍精度整数のインクリメントを行う 1 入力オペランドの命令である。
以下の例では例 2の効果に加え、Tレジスタ($t)から読み出したデータをインクリメントしてGRF1 ($ls0v)に格納する。
code:例 3
dvpassa $lm0v $ln0v $lr0v;linc $t $ls0v
3.6.1 オペランド
3.6.2 マスクレジスタ
3.6.3 ハザードの回避
3.6.4 並列実行条件
3.6.5 nop-NOP
3.6.6 noforward-フォワーディングと折り返しレジスタの更新をしない
3.6.7 L2BM命令式
3.6.8 L1BM命令式
3.6.9 MAU命令式
3.6.10 行列レジスタ書き込み命令式
3.6.11 行列レジスタ読み出し命令式
3.6.12 ALU命令式
3.6.13 wait-PE命令にMV命令を待機させる